#!/bin/sh

set -C -f -u
#IFS=$'\n'
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"

# ANSI color codes are supported.
# STDIN is disabled, so interactive scripts won't work properly

# This script is considered a configuration file and must be updated manually.

# Meanings of exit codes:
# code | meaning    | action of ranger
# -----+------------+-------------------------------------------
# 0    | success    | Display stdout as preview
# 1    | no preview | Display no preview at all
# 2    | plain text | Display the plain content of the file

# Script arguments
FILE_PATH="${1}"         # Full path of the highlighted file
HEIGHT="${2}"
export HEIGHT
# Settings

handle_mime() {
    mimetype="${1}"
    case "${mimetype}" in
	text/html) lynx -dump "${FILE_PATH}" ;;
	text/troff) man ./ "${FILE_PATH}" | col -b ;;
	*/*epub*) mutool draw -F txt -i -- "${FILE_PATH}" 1-10 2>/dev/null	;;
	image/vnd.djvu) djvutxt --page=1-10 "${FILE_PATH}"			;;
	*/*zip|rar) als "${FILE_PATH}" ;;
	*/x-dosexec) innoextract -l "${FILE_PATH}" ;;
	text/* | */xml) cat "${FILE_PATH}" ;;
	image/*) chafa --fill=block --symbols=block -c 256 -s 80x"${HEIGHT}" "${FILE_PATH}" || exit 1;;
	video/*|application/octet-stream) ffthumb "${FILE_PATH}" || exit 1;;
	audio/*|application/x-font-gdos) { exiftool -b -Picture "${FILE_PATH}" | \
		chafa --fill=block --symbols=block -c 256 -s 30x"${HEIGHT}" - ; mediainfo "${FILE_PATH}";  };;
	*/pdf) gs -sDEVICE=jpeg -dLastPage=1 "${FILE_PATH}" | chafa --fill=block --symbols=block -c 256 -s 80x"${HEIGHT}";  pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" -			;;
	*opendocument*) odt2txt "${FILE_PATH}" ;;
    esac
}

MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
handle_mime "${MIMETYPE}"
exit 1
